
/*************************************************************************
 *
 * inicializace a spusteni kernelu
 * 
 * (c) Ales Povalac, alpov@alpov.net, http://www.alpov.net/
 * 
 *************************************************************************
 *
 * $Id: main.c 107 2006-12-22 15:33:48Z alpov $
 * 
 *************************************************************************/         

#include <stdint.h>
#include <avr/io.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#include "../avrx/avrx.h"
#include "../avrx/AvrXFifo.h"
#include "beep.h"
#include "button.h"
#include "menu.h"
#include "serial.h"
#include "data.h"


/*************************************************************************
 * main()
 *************************************************************************/ 
int main(void)
{
    AvrXSetKernelStack(0);
    
    set_sleep_mode(SLEEP_MODE_IDLE);
    sleep_enable();

    OCR0 = F_CPU/(64*F_TICKRATE);
    TCCR0 = _BV(WGM01) | _BV(CS01) | _BV(CS00);
    TIMSK = _BV(OCIE0);

    AvrXSetSemaphore(&DataLock);
    AvrXSetSemaphore(&EEPromMutex);

    ReadEepromData();
    InitBeepTask();
    InitButtonTask();
    InitMenuTask();
    InitSerialTask();
    
    AvrXRunTask(TCB(BeepTask));
    AvrXRunTask(TCB(ButtonTask));
    AvrXRunTask(TCB(SerialTask));
    AvrXRunTask(TCB(MenuTask));
    
    Epilog();
    while(1);
}


/*************************************************************************
 * interrupt compare match casovace 0
 * volano kazdou milisekundu, pouziva se pro casovani AvrX
 *************************************************************************/  
AVRX_SIGINT(TIMER0_COMP_vect)
{
    IntProlog();
    AvrXTimerHandler();
    Epilog();
}


/*************************************************************************
 * vychozi interrupt
 * presmerovano na AvrXHalt() pro zachyceni debuggerm
 *************************************************************************/  
AVRX_SIGINT(__vector_default)
{
    AvrXHalt();
}
